字符型日期与数值型日期处理
本文作者:王 涛 石河子大学
文字编辑:李钊颖
技术总编:李朋冲
重大通知!!!2019年7月5日至7月8日在武汉举行的首期Python编程技术定制培训,招生工作已经圆满结束。另外爬虫俱乐部将于2019年8月22日至28日在湖北武汉举行为期一周的Stata编程技术定制培训,此次采取初级班和高级班分批次培训,仍在火热招生中。
详细培训大纲及报名方式,请点击文末阅读原文呦~
日期的提取在数据处理中不可或缺,常见的类型是字符型时间变量的提取,例如,利用date()函数、substr()函数、todatetime命令,然而对于数值型变量日期的提取却鲜有介绍。
本文首先介绍对于字符型日期提取的方法,然后利用爬虫俱乐部线下培训过程中遇到的答疑问题,详细介绍数值型变量日期的提取。
一、字符型变量日期提取
首先,我们利用input命令输入两个日期,例如6/17/2019和6/09/2019,程序如下:
clear
input str15 date
"6/17/2019"
"6/09/2019"
end
browse
然后,为将字符型日期转为数值型,我们可以利用date()函数加format命令,程序如下:
gen d = date(date,"MDY")
format d %tdCY-N-D
browse
当然你也可以选择日期显示格式,例如我们输入如下程序将会显示不同的日期格式:
gen d1 = date(date,"MDY")
gen d2 = date(date,"MDY")
gen d3 = date(date,"MDY")
gen d4 = date(date,"MDY")
format d1 %tdCY.N.D
format d2 %tdCY/N/D
format d3 %tdCY-M-D
format d4 %tdCY_M_D //"_"表示空格
browse
最后我们利用year()、month()函数和substr()函数提取年份和月份,程序如下:
gen year = year(d)
gen month = month(d)
gen year1 = real(substr(date,6,4))
gen month1 = real(substr(date,1,1))
browse
除了一般常见的年月日日期数据,还有一些带时分秒的日期类型,例如2019-06-17 14:04:31.890。对于这样日期,我们依然可以利用date()函数,处理方式和上面类似,程序如下:
clear
input str29 time
"2019-06-17 14:04:31.890"
end
gen date = date(time,"YMDhms")
format date %tdCY-N-D
browse
此外,我们还可以利用clock()函数和dofc()函数,clock()函数表示此日期与1960年1月1日00:00:000相距的毫秒数;dofc()函数是将毫秒数转化为天数。程序如下:
gen date1=dofc(clock(time,"YMDhms"))
format date1 %tdCY-N-D
browse
上图中date和date1日期一样,可见两种方式均可。接着我们依然按照上面的方式提取年份和月份,程序如下:
gen year=real(substr(time,1,4)) //字符型的直接提取
gen year1=year(date) //数值型日期提取
gen month = real(substr(time,6,2))
gen month1 = month(date)
爬虫俱乐部将于2019年8月22日至28日在湖北武汉举行为期一周的Stata编程技术定制培训,此次采取初级班和高级班分批次培训。课程通过案例教学模式,旨在帮助大家在短期内掌握Stata软件编程、金融计量知识和实证分析方法,使大家熟悉Stata核心的爬虫技术,以及Stata与其他软件交互的高端技术。
初级班主要是为了让学员掌握Stata数据分析技巧,并能独立撰写相关的程序。涉及内容包括多种数据格式的读取和输出、数据的合并、实证结果的输出以及爬虫俱乐部编写的命令介绍等。
高级班主要是为了让学员掌握Stata软件进阶操作,涉及内容包括正则表达式、网络爬虫技巧、文本分析等技术。经过团队精心策划,此次课程新增北大法宝裁判文书信息提取和百度地图api调用两大案例,以及新兴实证研究方法介绍,相信定能让学员受益匪浅!
扫描下方二维码或点击阅读原文提交报名信息→缴费→发送缴费截图至statatraining@163.com(邮件主题为“爬虫俱乐部2019暑期Stata培训+姓名+单位+班次”)→报名成功。
二、数值型变量日期提取
以上是对于常见的字符型日期提取的介绍。然而,在数据处理过程中,我们还会遇到日期是年月日时分秒的数值型变量,此时字符型的date()函数和substr()函数失效,对于这样的数据我们该怎么提取年份和月份呢?
我们使用数据time.dta进行演示,该数据我们已上传到stata-club云端,大家可直接调用。首先读入并浏览数据:
clear
use "https://stata-club-1257787903.cos.ap-chengdu.myqcloud.com/time.dta", clear
des
browse in 1/10
可见,Date是数值型变量,要提取年份和月份,date()函数和substr()函数就不可用了。 format可以变换日期的显示格式,我们输入:
format Date %tcDDmonCCYY
browse in 1/10
Date日期虽只显示年月日,其本质还是带时分秒的日期。为此,我们只有先利用dofc()函数将变量转化为天数,再用year()和month()函数提取对应的年份和月份,程序如下:
gen date = dofc(Date)
gen year=year(date)
gen month = month(date)
browse in 1/10
这样,我们把年份和月份提取出来了。当然也可以手工计算,此处不再赘述。以上就是对于Stata中字符型日期变量和和数值型日期变量转换的介绍。看过这篇推文,相信你已经掌握了日期变量的数据处理了!
对爬虫俱乐部的推文累计打赏超过1000元我们即可给您开具发票,发票类别为“咨询费”。用心做事,只为做您更贴心的小爬虫!
往期推文推荐
关于我们
微信公众号“爬虫俱乐部”分享实用的stata命令,欢迎转载、打赏。爬虫俱乐部是由李春涛教授领导下的研究生及本科生组成的大数据分析和数据挖掘团队。
此外,欢迎大家踊跃投稿,介绍一些关于stata的数据处理和分析技巧。
投稿邮箱:statatraining@163.com
投稿要求:
1)必须原创,禁止抄袭;
2)必须准确,详细,有例子,有截图;
注意事项:
1)所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,会在该推文里为作者署名,并有赏金分成。
2)邮件请注明投稿,邮件名称为“投稿+推文名称”。
3)应广大读者要求,现开通有偿问答服务,如果大家遇到关于stata分析数据的问题,可以在公众号中提出,只需支付少量赏金,我们会在后期的推文里给予解答。